//
//  NetWorkManager.m
//  A_Over_Packaging
//
//  Created by ChenNing on 15/10/23.
//  Copyright © 2015年 chenn. All rights reserved.
//

#import <AFNetworking.h>
#import <SDImageCache.h>
#import <CommonCrypto/CommonDigest.h>
#import <AFNetworkActivityIndicatorManager.h>

@implementation NetWorkManager

/**
 *  Get请求,有缓存
 *
 *  @param isCaChe     是否缓存
 *  @param url         请求地址
 *  @param resultData  返回结果
 *  @param resultRrror 返回错误
 */
+ (void)GET:(NSString *)url
    isCaChe:(BOOL)isCaChe
 resultData:(void (^)(id responseObject))resultData
resultRrror:(void (^)(NSError *error))resultRrror
{
    // 创建请求对象
    AFHTTPSessionManager *request = [AFHTTPSessionManager manager];
    // 超时时间设置为30秒
    request.requestSerializer.timeoutInterval = 30;
    // utf8
   NSString *requestUrl = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    // 发送Get请求
    [request GET:requestUrl parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        if (responseObject != nil) {
            if (isCaChe) {
                // 写入缓存
                NSString *cachePath = [self requestCachePath:url];
                [responseObject writeToFile:cachePath atomically:YES];
            }
            // 返回数据
            resultData(responseObject);
        }
    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
        // 返回错误信息
        resultRrror(error);
        if (isCaChe) {
            // 如果有缓存的数据,则返回缓存数据
            NSString *cachePath = [self requestCachePath:url];
            NSMutableDictionary *cacheData = [[NSMutableDictionary alloc] initWithContentsOfFile:cachePath];
            resultData(cacheData);
        }
    }];
}







/**
 *  Post请求
 *
 *  @param url         请求地址
 *  @param parameters  请求参数
 *  @param resultData  返回结果
 *  @param resultRrror 返回错误
 */
+ (void)POST:(NSString *)url
  parameters:(id)parameters
  resultData:(void (^)(id responseObject))resultData
 resultRrror:(void (^)(NSError *error))resultRrror
{
    // 创建请求对象
    AFHTTPSessionManager *request = [AFHTTPSessionManager manager];
    // 超时时间设置为30秒
    request.requestSerializer.timeoutInterval = 30;
    // utf8
    NSString *requestUrl = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    // 发送Post请求
    [request POST:requestUrl parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        // 返回数据
        resultData(responseObject);
    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
        // 返回错误信息
        resultRrror(error);
    }];
}

/**
 *  缓存路径
 *
 *  @return 返回存放缓存的文件夹路径
 */
+ (NSString *)cachePath
{
    // 取出缓存路径
    NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    
    // 拼接存放缓存的文件夹路径
    NSString *myCachesPath = [cachesPath stringByAppendingPathComponent:@"myCaches"];
    
    return myCachesPath;
}

/**
 *  请求的缓存路径
 *
 *  @param url 请求地址
 *
 *  @return 缓存路径
 */
+ (NSString *)requestCachePath:(NSString *)url
{
    // 取出缓存路径
    NSString *cachesPath = [self cachePath];
    
    // 文件管理器
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    // 如果路径不存在,则创建缓存文件夹
    if (![fileManager isExecutableFileAtPath:cachesPath]) {
        [fileManager createDirectoryAtPath:cachesPath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    
    // 生成该请求对应的缓存文件的文件名
    NSString *requestCacheFileName = [NSString stringWithFormat:@"/%@.aa",[self md5HexDigest:url]];
    // 拼接该请求的缓存路径
    NSString *rquestCacheFilePath = [cachesPath stringByAppendingString:requestCacheFileName];
    
    return rquestCacheFilePath;
}

/**
 *  清空缓存
 */
+ (void) clearCaches
{
    // 存放缓存的文件夹路径
    NSString *cachePath = [self cachePath];
    
    // 创建文件管理对象
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    // 如果该缓存路径存在,则删除该缓存文件夹
    if ([fileManager fileExistsAtPath:cachePath]) {
        [fileManager removeItemAtPath:cachePath error:nil];
    }
    
    // 清理图片缓存
    SDImageCache *sdImage = [SDImageCache sharedImageCache];
    [sdImage clearDisk];
}

/**
 *  缓存大小
 *
 *  @return 返回缓存大小
 */
+ (CGFloat) getSizeOfCaches
{
    // 存放缓存的文件夹路径
    NSString *newCachesPath = [self cachePath];
    
    // 创建文件管理对象
    NSFileManager *fileManager = [NSFileManager defaultManager];
    CGFloat cacheSize = [[fileManager attributesOfItemAtPath:newCachesPath error:nil] fileSize];
    
    // 图片缓存
    SDImageCache *sdImage = [SDImageCache sharedImageCache];
    NSUInteger sdSize = [sdImage getSize];
    
    return cacheSize+sdSize;
}

/**
 *  MD5加密
 *
 *  @param input 需要生成md5的字符串
 *
 *  @return 返回MD5
 */
+ (NSString *)md5HexDigest:(NSString*)input
{
    const char* str = [input UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(str, (int)strlen(str), result);
    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
    for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
        [ret appendFormat:@"%2s",result];
    }
    return ret;
}


@end
